home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
MACD 5
/
MACD 5.bin
/
workbench
/
libs
/
newlooklib.lha
/
newlook
/
initnewwindow.c
< prev
next >
Wrap
C/C++ Source or Header
|
1993-11-06
|
3KB
|
111 lines
/*
* INITNEWWINDOW.C
*/
#include "newlook.h"
#ifndef AUTOSCROLL
#define AUTOSCROLL 0x4000 /* V36+ */
#endif /* !AUTOSCROLL */
extern BOOL GetScreenData( APTR, UWORD, UWORD, struct Screen * );
/*
* BUGS
* Ich habe keinen Plan, wie ich die Breite des rechten WindowBorders
* rausfinden soll, wenn das Window ein SizeGadget hat.
*/
struct NewWindow *InitNewWindow(nw, title, w,h, idcmp,flags, glist)
struct NewWindow *nw; /* ... will be allocated if nw == NULL */
UBYTE *title;
WORD w,h; /* inner (!) window dimensions */
ULONG idcmp, flags;
struct Gadget *glist;
{
if(!nw)
{
if(nw= (struct NewWindow *)SmartAllocate(NEWWINDOWSIZE))
nw->Screen= (struct Screen *)NULL;
}
if(nw)
{
struct Screen sbuf, *s= nw->Screen;
if(!s)
{
nw->Type= (UWORD)WBENCHSCREEN;
if(GetScreenData(&sbuf, sizeof(struct Screen), nw->Type, NULL))
{
/* GetScreenData() lies about dimensions */
sbuf.Width = sbuf.ViewPort.DWidth;
sbuf.Height = sbuf.ViewPort.DHeight;
s= &sbuf;
}
}
/* else nw->Type must be set by the caller !!! */
/* set parameter values */
nw->Width = w;
nw->Height = h;
if(s)
{
nw->Width += s->WBorLeft + s->WBorRight;
nw->Height += s->WBorTop + s->RastPort.TxHeight+1 + s->WBorBottom;
/*
* If we're going to open on an AUTOSCROLL Screen it is not
* wise to appear at a fix position so we'll try to pop up
* near the current location of the mouse pointer...
*/
if(s->Flags & AUTOSCROLL)
{
/* pop up under the mouse */
if((nw->LeftEdge= s->MouseX - nw->Width/2) < 0)
nw->LeftEdge= 0;
else if(nw->LeftEdge + nw->Width > s->Width)
nw->LeftEdge= s->Width - nw->Width;
if((nw->TopEdge= s->MouseY - nw->Height/2) < 0)
nw->TopEdge= 0;
else if(nw->TopEdge+nw->Height > s->Height)
nw->TopEdge= s->Height - nw->Height;
}
else /* !AUTOSCROLL */
{
/* center window on screen */
nw->LeftEdge = (s->Width - nw->Width)/2;
nw->TopEdge = (s->Height - nw->Height)/2;
}
}
else /* !Screen */
{
nw->LeftEdge =
nw->TopEdge = (WORD)0L;
}
/* parameter values */
nw->IDCMPFlags = idcmp;
nw->Flags = flags;
nw->FirstGadget = glist;
nw->Title = title;
/* default values */
nw->DetailPen = (UBYTE)0L;
nw->BlockPen = (UBYTE)1L;
nw->CheckMark = (struct Image *)NULL;
nw->BitMap = (struct BitMap *)NULL;
nw->MinWidth =
nw->MinHeight = (WORD)0L;
nw->MaxWidth =
nw->MaxHeight = (UWORD)0L;
}
return nw;
}